import axios from 'axios'
import qs from 'qs'
import {Message} from 'element-ui'
import router from '../main'

axios.defaults.timeout = 10000;


//添加请求拦截器
axios.interceptors.request.use(
    config => {
  
      if (sessionStorage.token) {
        config.headers.token = sessionStorage.token;
      //  config.headers['Content-Type'] = 'application/json'
      }
      return config;
    },
    error => {
      return Promise.reject(error);
    }
  );

axios.interceptors.response.use( 
    response => {
      
    if (response.data.code === 200) {  
     return Promise.resolve(response); 
    } else {  
      
    switch (response.data.code) {  
     
        case 401:   
         Message.error( '未登陆或登陆失效，请重新登录');
         router.replace({   
         path: '/login'
     
         });
       
         break;
       
        // 402 token过期

        case 402:
         Message.error( '登录过期，请重新登录');
         // 清除token
    
         setTimeout(() => {   
         router.push('/');   
         }, 1000);   
         break;
        // 404请求不存在
        case 404:
         Message.error('网络请求不存在');
         break;
        // 其他错误，直接抛出错误提示
        default:
         Message.warning( response.data.message);
       }
     return Promise.reject(response.data.message); 
    } 
    }, 
    error => { 
     return Promise.reject(error.response);
    
    } 
   );

/**
 * @param res返回数据列表
 */
function handleResults(res){

    return res;
   
}

/**
 * 请求接口url
 */
function handleUrl(url){
    var url = BASE_URL + url;
    return url;
}

/**
 * @param data数据列表
 * @return
 */
function handleParams(data){
    return data;
}


/**
 * @url
 * @response 正常的回调
 * @data
 * @exception 异常的回调函数
 */

export  function post(url,data){
    return new Promise((resolve,reject)=>{
       axios.post(
           url,
           qs.stringify(data)
       ).then((res)=>{
         
           handleResults(res);
           resolve(handleResults(res))
       }).catch((error)=>{
        
        //    if(exception){
        //        exception
        //    }
        Message.error(error)
        handleResults(error);
           reject(error)
       })
    })
   
}
/**
* 
* @param {} url 
* @param {} data 
* get参数为对象{},对象参数params值为参数对象
*/
export function get(url,data){
    return new Promise((resolve,reject)=>{
    
        axios.get(
            url,
            {params:data}
            
        ).then((res)=>{
        
           resolve(handleResults(res))
        }).catch((error)=>{
         
         Message.error(error)
           reject(error)
        })
    })
}



